#include "history.h"
#include "ui_history.h"//历史记录

History::History(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::History)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(searchSlot())); //点击查询历史记录
}
// 用于接收MQTT的槽函数
void History::dataUpSlot(QByteArray Array)
{
    QString payload = Array;
    QJsonParseError jsonerror;  // 创建一个JSON解析错误对象
    QJsonDocument doc = QJsonDocument::fromJson(payload.toLatin1(), &jsonerror); // 将JSON数据解析为QJsonDocument对象
    if (!doc.isNull() && jsonerror.error == QJsonParseError::NoError) // 检查是否解析成功
    {
        if (doc.isObject())  // 如果是一个对象
        {
            QJsonObject objectroot = doc.object();  // 获取根节点
            QStringList listkeys = objectroot.keys(); // 获取JSON对象的所有键

            int type = objectroot.value("type").toInt(); // 获取"type"字段的值
            int result = objectroot.value("result").toInt(); // 获取"result"字段的值
            int key = objectroot.value("key").toInt(); // 获取"key"字段的值

            if (type == 4)
            {
                QJsonArray dataArray = objectroot.value("data").toArray(); // 获取 "data" 字段中的数组

                // 使用常量迭代器遍历 QJsonArray
                for (int i = 0; i < dataArray.size(); ++i)
                {
                    QJsonValue value = dataArray.at(i);
                    QJsonObject itemObj = value.toObject();
                    int time = itemObj.value("time").toInt(); // 获取时间戳
                    QString val = itemObj.value("val").toString(); // 获取数据点值
                    // 将时间戳转换为 QDateTime 对象
                    //QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time);
                    // 格式化为字符串
                    //QString formattedDateTime = dateTime.toString("yyyy-MM-dd HH:mm:ss");
                    //qDebug()<<"时间戳"<<formattedDateTime;
                    qDebug()<<"值"<<val;
                    ui->listWidget->addItem(val);
                }
            }
        }
    }
}

void History::searchSlot()
{
    int id,key;
    id = ui->comboBox->currentIndex();
    //判断所选数据的key值
    if(id==0)
    {
        key=104;
    }
    else if(id==1)
    {
        key=105;
    }
    else if(id==2)
    {
        key=201;
    }
    else if(id==3)
    {
        key=202;
    }
    else if(id==4)
    {
        key=203;
    }
    //获取下拉单的数据
    kmonth=ui->comboBox_2->currentText();
    kday=ui->comboBox_3->currentText();
    zmonth=ui->comboBox_4->currentText();
    zday=ui->comboBox_5->currentText();
    ks=ui->comboBox_6->currentText();
    zs=ui->comboBox_7->currentText();


    //字符串转化为整形
    int ky = kmonth.toInt();
    int kr=kday.toInt();
    int zy=zmonth.toInt();
    int zr=zday.toInt();
    int ks1=ks.toInt();
    int zs1=zs.toInt();

    // 初始化开始时间戳
    QDate kdate(2024, ky, kr);  // 假设年份是2024年
    QTime ktime(ks1, 00, 0);     // 假设时间为14:30:00
    // 创建 QDateTime 对象，时间为指定时间
    QDateTime kdateTime(kdate, ktime);
    // 获取时间戳（秒数）
    qint64 ktimestamp = kdateTime.toMSecsSinceEpoch() / 1000;
    // 输出时间戳
    qDebug() << "Start Timestamp:" << ktimestamp;

    //初始化截至时间戳
    QDate zdate(2024, zy, zr);  // 假设年份是2024年
    QTime ztime(zs1, 00, 0);     // 假设时间为14:30:00
    // 创建 QDateTime 对象，时间为 00:00:00
    QDateTime zdateTime(zdate,ztime);
    // 获取时间戳（秒数）
    qint64 ztimestamp = zdateTime.toMSecsSinceEpoch() / 1000;
    // 输出时间戳
    qDebug() << "Timestamp:" << ztimestamp;

    QMQTT::Message message;
    // 设置主题
    message.setTopic("/app/data/down");
    QString joint=QString("{\"type\":4,\"data\":{\"key\":%1,\"limit\":{\"begin\":%2,\"end\":%3}}}").arg(key).arg(ktimestamp).arg(ztimestamp);
    qDebug() << "拼接为：" << joint;
    QByteArray data = joint.toUtf8();
    message.setPayload(data);
    // 发送命令
    if (GlobalVal::mqtt)
    {
        GlobalVal::mqtt->publish(message);
    }
    else
    {
        qDebug() << "MQTT client is not initialized.";
    }

}

void History::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    QPixmap pic(":/new/prefix1/history.jpg");
    painter.drawPixmap(0,0,this->width(),this->height(),pic);
}

History::~History()
{
    delete ui;
}

